package com.design.interpreter;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * @author leali
 * @title: ExpressionNode
 * @projectName design
 * @description: 表达式节点类：非终结符表达式
 * @date 2022/1/3 18:59
 */
public class ExpressionNode extends Node{
    private final ArrayList<Node> nodes = new ArrayList<Node>();
    @Override
    public void interpret(Context context) {
        //循环处理Context中的标记
        while (true){
            //如果已经没有任何标记，则退出解释
            if (context.currentToken() == null) {
                break;
            }
            //如果标记为END，则不解释END并结束本次解释过程，可以继续之后的解释
            else if ("END".equals(context.currentToken())) {
                context.skipToken("END");
                break;
            }
            //如果为其他标记，则解释标记并将其加入命令集合
            else {
                Node commandNode = new CommandNode();
                commandNode.interpret(context);
                nodes.add(commandNode);
            }
        }
    }

    @Override
    public void execute() {
        for (Node node : nodes) {
            node.execute();
        }
    }
}